Listin Gambas2

Création d'un programme en Gambas2 : un répertoire téléphonique pas à pas

Origine : http://listingambas.blogspot.com/2011/06/modulo-importar-y-exportar-desde-el.html



Module Importer et exporter - presse-papiers

Pour être plus utiles, réemployer des données provenant d'autres programmes ou utiliser les notres dans d'autres programmes, est l'une des choses que tous nos programmes doivent savoir faire. Pouvez-vous imaginer que vous ayez dans Listin un grand nombre de données, mais que vous ne puissiez pas les utiliser pour, par exemple, vous servir de  l'adresse de chacun? Est-ce qu'il nous faudra tout ré-écrire?
Eh bien dans ce module, nous allons utiliser la méthode la plus simple qui existe pour transmettre des données d'un programme à l'autre: le presse-papiers.



Export: Clipboard.Copy

Dans un premier  temps nous créons le module exporter, il va ensuite falloir ajouter le code nécessaire pour transférer les informations de gridviewDonnees vers le presse-papiers. 

Dans notre Fmain, nous créons un menu, nous choisissons Exporter, et définissons le code suivant dans Fmain :
Menu Exporter









PUBLIC SUB Exp_Click ()
Exporter. copierpressepapier(grid VoirDonnees)
END



Note: Lors de la création dans l'éditeur de menu, on a defini ainsi Exporter Importer / Exporter

Export MNU




PUBLIC SUB CopiePressepapier(grille AS GridView)
DIM texte AS String
DIM a AS Integer
DIM b AS Integer
IF grille. header = 1 OR grille. header = 3 THEN
FOR a = 0 TO grille. Columns.count - 1
Texte & = grille. Columns [a]. Titre & "\ t"
NEXT
Texte & = "\ n"
ENDIF
FOR a = 0 TO grille. Rows . COUNT - 1
FOR b = 0 TO grille. Columns . COUNT - 1
Texte & = verif(grille[a, b].text) & "\ t"
NEXT ' b
Texte & = "\ n"
NEXT ' a
Clipboard.Copy(texte)
END


-------------------------------------------------- ------------------
PUBLIC SUB verif (Chaine AS String ) AS String
DIM a AS Integer
DIM lettre AS String
DIM retour AS String
DIM test AS Integer
'on vérifie qu'il n'y a pas de chiffre
FOR a = 1 TO Len (Chaine)
lettre = Mid $ (Chaine, a, 1 )
test = InStr ( "0123456789." , lettre)
IF test = 0 THEN
RETURN Chaine
' Ne contient que des lettres
ENDIF
NEXT
FOR a = 1 TO Len ( Chaine)
lettre = Mid $ ( Chaine, a, 1 )
IF points = "". THEN
lettre = ""
ENDIF
retour = & lettre
NEXT
RETURN retour
FIN



Comme on le voit, il est divisée en deux sous-programmes :
 "CopiePressepapier "  passe la grille que nous voulons copier (grille
AS GridView ) au premier sous-programme. On lit les valeurs des titres de colonnes et des différentes lignes, en les ajoutant dans une variable appelée texte, puis avec la commande Clipboard.Copy(texte) on la passe au presse-papier.
Le deuxième sous-programme, " vérif " convertit le point décimal en virgule, de sorte que, par exemple ,une feuille de calcul lise correctement les nombres.
Après avoir cliqué sur le menu
" Exporter ", le contenu actuel de gridviewDonnees (ou, s'il est filtré, seulement ce qui est extrait) est dans le  presse-papier, nous pouvons le coller (dans OpenOffice Calc par exemple) :
Ouvrons OpenOffice Calc, cliquons sur le menu "Edition / Coller", nous obtenons cet écran:


Coller données














Nous cliquons sur "Accepter" et on obtient :

export vers Calc
 


Import : Clipboard.Paste

Pour importer des données,  nous allons plutôt utiliser l'ordre Clipboard.Paste.
Nous allons, par exemple, faire qu'à partir d'un tableur nous puissions transférer les données dans notre Listin.
Dans le formulaire Fmain, cliquons sur le menu Import / Export / Import et écrivons le code suivant:

import










PUBLIC SUB Imp_Click ()
FOpenOfficeCalcGambas2. Show ()
END


Nous allons créer un nouveau formulaire : FopenOfficeCalcGambas2
et exécuter le code suivant chaque fois que nous l'ouvrons :

PUBLIC SUB Form_Open ()
GridViewLecture. Rows . COUNT = 1001
GridViewLecture. Columns . COUNT = 20
END


Formulaire Fopenoffice




Le CheckBoxTitres, quand il est coché, signifie que le contenu du presse-papiers contient dans sa première ligne les titres (en-têtes des colonnes) ou uniquement les données. Nous allons lire cette propriété lorsque nous en aurons besoin.
        ( CheckBoxTitres.value ) 

Le bouton "Cliquer pour voir le presse papier" exécute le code de lecture du presse-papiers
Le bouton "Ajouter des données" est responsable de la transmission du gridviewlecture vers  la mémoire.
Le bouton "Annuler" permet d'annuler l'ensemble du processus.
Son code est des plus simples :


PUBLIC SUB ButtonAnnuler_Click ()
Me.Close ()
END


Et ouis, nous allons séparer :

Code "Cliquez pour lire la presse papier" Clipboard.Paste ()

PUBLIC SUB LirePressePapier_Click ()
DIM titres AS booléenne
IF CheckBoxTitres. value = - 1 THEN
FOpenOfficeCalcGambas2. GridViewLecture . Header = 1
Titres = - 1
ELSE
FOpenOfficeCalcGambas2. GridViewLecture . Header = 0
Titres = 0
ENDIF
GridViewLecture. Rows . COUNT = 0
GridViewLecture. Columns . COUNT = 0
GridViewLecture. Rows . COUNT = 1001
GridViewLecture. Columns . COUNT = 20
lire (FOpenOfficeCalcGambas2. GridViewLecture , titres)
END

et le sous-programme suivant :


Lire la grille -----------------------------'------------------ ----------------------------
PUBLIC SUB lecture (grille AS gridview, titres AS booléenne )
'grille: c'est la gridview où on va écrire les données
'titres: 0: pas de titres, -1 le titre contient la première fiche
DIM lignes AS String[]
DIM ligne_en_cours AS String
DIM colonnes AS String[]
DIM a AS Integer
DIM c AS Integer
DIM chaine AS String
DIM pressepapier AS String
DIM finligne AS String
DIM fincolonne AS String
finligne = "\ n" ' retour charriot (sépare les fiches)
fincolonne = "\ t" '' tabulation (seépare les colonnes)
presse-papiers = Clipboard.paste ()
lignes = Split (presse-papiers, finligne)
FOR a = 0 TO lignes. COUNT - 1
ligne_en_cours = lignes [a]
colonnes = Split (ligne_en_cours, fincolonne)
FOR  c = 0 TO . colonnes COUNT - 1
IF a = 0 AND titres = - 1 THEN
grille. Columns [c]. title = colonnes [c]
AUTRE
IF titres = 0 THEN grille [a, c]. text = colonnes [c]
IF titres = - 1 THEN grille [a - 1 ., c] text = colonnes [c]
ENDIF
NEXT ' c    
NEXT ​​' a
END



A titre de commentaire, la commande la plus importante est   presse-papiers = Clipboard.Paste ()
et l'ordre split () va séparer les lignes distinctes du texte par le retour chariot "\ n" , et les données  par des tabulations "\ t"

Code pour "Ajouter des données à Listin"


PUBLIC SUB ButtonAjouter_Click ()
DIM a AS Integer
DIM répète AS Integer
SI CheckBoxTitres. Value = TRUE THEN
«La première ligne contient les titres
a = 1
ENDIF
FOR repete = a TO 1001
IF verif (repete) <> 1 THEN
var id . add ( "Id" & Str $ ( NOW ) & Str $ (repete))
var. dni . add ((GridViewLecture [repete, 3 ]. text )
var. nom . add ((GridViewLecture [repete, 1 ]. text)
var. prenoms . add ((GridViewLecture [repete, 2 ]. text)
var. entreprise . add ((GridViewLecture [repete, 4 ]. text)
var. poste . add ((GridViewLecture [repete, 5 ]. text)
var. tel_entreprise . add ((GridViewLecture [repete, 6 ]. text)
var. tel_perso . add ((GridViewLecture [repete, 8 ]. text)
var. Fax . add ((GridViewLecture [repete ,10 ]. text)
var. mobile_entreprise . add(GridViewLecture [repete, 7 ]. text)
var. mobile_perso . add(GridViewLecture [repete, 9 ]. text)
var. page . ajouter (GridViewLecture [repete, 12 ]. text)
var. photo . add( "icône: / 16/gambas" )
var. adresse . add(GridViewLecture [repete, 13 ]. text)
var. commentaires . add(GridViewLecture [repete, 14 ]. text)
var. date_donnees . add(GridViewLecture [repete, 15 ]. text)
var. mail . add(GridViewLecture [repete, 11 ]. text)
ELSE
GOTO finlecture
ENDIF
NEXT
finlecture:
titre. remplir ()
Message. info ("Données chargées")
ME . Close
END
'-------retourne 0 si la fiche ne contient pas de données (elles valent toutes “”) ------
PUBLIC FONCTION VerifSiVide (fila AS Integer ) AS Integer
DIM b AS Integer
FOR b = 0 TO 19 'autant de fois qu'il y a de colonnes, pour ne pas avoir d'enregistrement vide
IF  GridViewLecture[fila, b].text <> "" THEN
RETURN
0

ENDIF
NEXT
RETURN 1
END



Commentaires :
1. La fonction VerifSiVide,  fait que lorsque la ligne de gridviewlecture est complètement vide  (sans texte dans l'une de ses colonnes)  elle retourne 0, et la procédure principale ButtonAjouter_Click () , cesse d'ajouter des informations. Sinon elle retourne 1 pour continuer d'ajouter l'enregistrement .

( IF VerifSivide (repete) <> 1 THEN ....)

2. Nous ajoutons seulement l'icône de Gambas dans l'image de la donnée que nous lisons, var.Photo.add ("icône: / 16/gambas")
Ce devrait être un chemin, mais si ce n'est pas un chemin valide  une erreur serait générée, elle ferait sortir du programme.
Je vous laisse comme exercice, si vous le voulez bien, l'amélioration de cette partie du code ....